package com.xzmzhp.service.people;

import com.xzmzhp.pojo.people.Personnel;
import com.xzmzhp.utils.return_tool.ReturnData;
import com.xzmzhp.vo.personnel.PersonnelVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author 王源(xm)
 * @Date: 2020/11/19 21:09
 * @Description: 人员信息逻辑接口
 */
@Repository
public interface PersonnelService {
    /**
     * 查询所有人员信息
     *
     * @return ReturnData对象
     */
    ReturnData findAll();

    /**
     * 根据人员id查询人员信息
     *
     * @param personnelId 人员id
     * @return ReturnData对象
     */
    ReturnData findByPersonnelId(int personnelId);

    /**
     * 根据人员学号模糊查询人员信息
     *
     * @param studentId 学号
     * @return ReturnData对象
     */
    ReturnData findByStudentId(String studentId);

    /**
     * 根据人员姓名、权限名称、部门名称、年级其中的一个或多个查询人员数据
     *
     * @param personnelName  人员姓名
     * @param competenceName 权限名称
     * @param positionName   部门名称
     * @param personnelGrade 年级
     * @return ReturnData对象
     */
    ReturnData findPersonnel(String personnelName, String competenceName, String positionName, int personnelGrade);

    /**
     * 根据人员姓名、权限id、部门id、年级其中的一个或多个查询人员数据
     *
     * @param competenceId   权限id
     * @param positionId     部门id
     * @param personnelGrade 年级
     * @param personnelId    人员id
     * @return Personnel集合
     */
    ReturnData checkPersonnel(int competenceId, int positionId, int personnelGrade, int personnelId);

    /**
     * 根据id查询活动名称
     *
     * @param personnelId 人员id
     * @return 活动名称
     */
    ReturnData findActivityNames(int personnelId);

    /**
     * 根据人员id查询人员信息
     *
     * @param personnelId 人员id数组
     * @return PersonnelVo
     */
    ReturnData findByPersonnelId(Integer[] personnelId);

    /**
     * 添加人员信息
     *
     * @param personnel 人员信息实体类
     * @return ReturnData对象
     */
    ReturnData addPersonnel(Personnel personnel);

    /**
     * 修改人员信息
     *
     * @param personnel 人员信息实体类
     * @return ReturnData对象
     */
    ReturnData updatePersonnel(Personnel personnel);

    /**
     * 查询部门人数
     * @param positionId 部门id
     * @param grade 年级
     * @return 部门总人数
     */
    Integer findPositionPeoples(Integer positionId,Integer grade);

    /**
     * 批量修改人员部门
     * @param primaryPositionId 原部门id
     * @param targetPositionId  目标部门id
     * @param grade 年级
     * @return 修改信息
     */
    Integer exitBatchPosition(@Param("primaryPositionId") Integer primaryPositionId, @Param("targetPositionId") Integer targetPositionId, Integer grade);

    /**
     * 删除人员信息
     *
     * @param personnelId 人员id
     * @return ReturnData对象
     */
    ReturnData deletePersonnel(int personnelId);
}
